package packfile

import (
	"fmt"

	"github.com/vmihailenco/msgpack/v5"
)

// Encode msgpack编码，返回二进制数据
func Encode(v interface{}) ([]byte, error) {
	// 使用msgpack序列化
	encoded, err := msgpack.Marshal(v)
	if err != nil {
		return nil, fmt.Errorf("编码数据失败: %v", err)
	}

	// 压缩序列化后的数据以减小文件大小
	compressed, err := Compress(encoded)
	if err != nil {
		return nil, fmt.Errorf("压缩数据失败: %v", err)
	}
	return compressed, nil
}

// Decode 从msgpack二进制数据解码
func Decode(data []byte, v interface{}) error {
	// 解压数据
	compressed, err := Decompress(data)
	if err != nil {
		return fmt.Errorf("解压数据失败: %v", err)
	}
	// 反序列化数据
	if err := msgpack.Unmarshal(compressed, v); err != nil {
		return fmt.Errorf("解码数据失败: %v", err)
	}
	return nil
}
